package cn.itcast.factory;

import cn.itcast.dao.UserDao;

import java.util.Properties;
import java.util.ResourceBundle;

/**
 * 创建对象的工厂：
 * 1、加载配置文件
 * 2、根据指定的key，读取配置文件，获取对应的value（类全路径）
 */
public class BeanFactory {

    private static ResourceBundle bundle;

    // 静态代码块，在类第一次加载时候执行,完成初始化操作
    static {
        // ResourceBundle加载配置文件: 1. 只能加载类路径下的文件；2. 后缀只能是properties
        bundle = ResourceBundle.getBundle("bean");
    }

    /**
     * 根据指定的key，获取配置文件对应的value值
     * @param key 传入的参数key，对应配置文件的key
     * @return 返回类的全路径
     */
    public static <T> T getBean(String key,Class<T> clazz){
        // 根据key获取value值: userDao=cn.itcast.dao.impl.UserDaoOracleImpl
        String classFullName = bundle.getString(key);
        try {
            // 创建对象并返回
            return (T) Class.forName(classFullName).newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
